<?
// *****************************************************************************
// Объектно-ориентированный доступ к данным
// Префикс musers_
// Автор: Алексей Дьяченко
// Библиотека распространяется по лицензии GPL
// Принять участие в разработке или скачать новую версию вы можете на сайте
// http://www.my-site.ru/
/*
	Copyright 2006-2007 Alex Djachenko http://www.my-site.ru
	Authors: Alex Djachenko
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
// *****************************************************************************

// Перечисляем переменные из $MT_mod_dat, 
// которые нужно регистрировать в окружении при запуске файла модуля.
// Окружение автоматически устанавливается при загрузке файла
// через mst_modfileload()
$MT_mod_envvars='Processor';


mst_initmod('sharpobj',20070808);


// Подключение библиотек
// include_once(mst_modpath($MT_mod_name,'lib/conv.php'));


class musers_processor extends sharpobj_processor
{
    private $cfg;
    function __construct()
    {
        // Создаем справочники
        // Задаем формат справочников
        $this->cfg['md5'] = true;
        // ***Пользователи***
        // Объявляем формат
        $users_format = new sharpobj_storage_format();
        $users_format->addItem('login','login','row',array('null'=>false,'len_min'=>4,'len_max'=>100));
        $users_format->addItem('password','password','row',array('len_min'=>4,'len_max'=>100));
        $users_format->addItem('email','email','email',array('len_min'=>6,'len_max'=>100));
        $users_format->addItem('name','name','row',array('len_min'=>1,'len_max'=>200));
        $users_format->addItem('gender','gender','smallatword',array('len_min'=>4,'len_max'=>6));
        $users_format->addItem('freez','freez','int');
        $users_format->addItem('del','del','int');
        // Объявляем справочник
        $this->storageAdd
                        (
							'users', 
                            new sharpobj_storage_mysql
                            (
                                $users_format,
                                array(
										'tbname'=>'musers_users',
										'idfield'=>'id'
                                      )
                            )
                        );

    }
    /**
     * Регистрация пользователя
     * Возвращает id зарегистрированного пользователя
     * или false
     * @param $obj
     * @return int
     */
    protected function act_regUser($user)
    {
        if ($this->act_searchUserLoginCount($user->get('plain','login')) >0)
        {   // Такой логин уже есть
            return false;
        }
        if ($user->isNoData('password'))
        {   // Не задан пароль
            $password = $this->act_genPassword(8)->get('plain');
        }else
        {
            $password = $user->get('plain','password');
        }
        if ($this->cfg['md5'])
        {   // Требуется шифрование пароля 
            $password = md5($password);
        }
        $user->set('plain',$password,'password');
        $user_id = $this->storageLink('users')->insert($user);
        return $user_id;
    }
	/**
 	* Генератор паролей
 	*/
    protected function act_genPassword($charsnum=null)
    {	//
        $charsnum = sharpobj_conv_obj_int($charsnum);
	    if(!$charsnum)
	    {
		    $charsnum = 8;
	    }
	    mst_modload('pear','Text/Password');
	    return sharpobj_conv_string_obj(Text_Password::create($charsnum));
    }
    /**
     * Поиск пользователя по логину
     */
    protected function act_searchUserLogin($wholelogin)
    {
        //
        $wholelogin = sharpobj_conv_row_obj($wholelogin);
        return $this->storageLink('users')->sqlqueryGet(
						" WHERE `login`='{$wholelogin->get('sql')}'"
                            ." AND `del`=0");
    }
    protected function act_searchUserLoginCount($wholelogin)
    {
        //
        $wholelogin = sharpobj_conv_row_obj($wholelogin);
        return $this->storageLink('users')->sqlqueryOneValueInt(
						"SELECT COUNT(*) FROM #!table# "
						." WHERE `login`='{$wholelogin->get('sql')}'"
						." AND `del`=0");
    }
    protected function act_createTables()
    {
        //
        $this->storageLink('users')->sqlqueryAction("CREATE TABLE #!table# (
  `id` int(11) NOT NULL auto_increment,
  `login` varchar(255) collate utf8_unicode_ci NOT NULL,
  `password` varchar(255) collate utf8_unicode_ci NOT NULL,
  `email` varchar(255) collate utf8_unicode_ci default NULL,
  `name` varchar(255) collate utf8_unicode_ci default NULL COMMENT 'Имя или ник участника',
  `gender` varchar(6) collate utf8_unicode_ci default NULL COMMENT 'пол',
  `freez` tinyint(1) default '0',
  `del` tinyint(1) default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;");
    }
    protected function act_dropTables()
    {
        //
        $this->storageLink('users')->sqlqueryAction("DROP TABLE #!table#;");
    }
}

$MT_mod_dat['Processor'] = new musers_processor(); 
?>
